package com.erp.erp_servers.money;

import com.erp.erp_entitys.User.UserEntity;
import com.erp.erp_entitys.business.req.StatisticsInfoReq;
import com.erp.erp_entitys.money.entity.ReceivePaymentEntity;
import com.erp.erp_entitys.money.req.*;
import com.erp.erp_entitys.money.rsp.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * @ClassName : IReceivePaymentService
 * @Description : 资金管理-收款主表接口
 * @Author : lst
 * @Date: 2020-12-04 14:50
 */
public interface IReceivePaymentService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ReceivePaymentEntity queryById(Integer id);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param receivePayment 实例对象
     * @return 对象列表
     */
    List<ReceivePaymentEntity> queryAll(ReceivePaymentEntity receivePayment);


    /**
     * 通过多个id获取收款信息
     * @param ids id集合
     * @return 收款信息
     */
    List<ReceivePaymentEntity> getReceivePaymentByIds(@Param("ids") List<String> ids);

    /**
     * 新增数据
     *
     * @param receivePayment 实例对象
     * @return 影响行数
     */
    int insert(ReceivePaymentEntity receivePayment);

    /**
     * 修改数据
     *
     * @param receivePayment 实例对象
     * @return 影响行数
     */
    int update(ReceivePaymentEntity receivePayment);

    /**
     * 通过主键修改标记颜色数据
     * @param receivePayment 实例对象
     * @return 影响行数
     */
    int updateMarkColor(ReceivePaymentEntity receivePayment);

    /**
     * 获取收款、退款信息集合
     * @param req 查询参数
     * @return 收款、退款信息集合
     */
    List<ReceivePaymentInfoRsp> getReceivePaymentInfo(ReceivePaymentListReq req);




    /**
     * 获取拆分信息集合
     * @param ids 收款id集合
     * @return 拆分信息集合
     */
    List<SplitInfoRsp> getSplitInfo(@Param("ids") List<String> ids);

    /**
     * 根据外销合同号获取结汇相关信息
     * @param contractNo 外销合同号
     * @return 结汇相关信息
     */
    List<BillExchangeAndCostInfoRsp> getBillExchangeInfoByContractNo(@Param("contractNo") String contractNo);



    /**
     * 退款-获取收款信息
     * @param ids 收款id
     * @return 收款信息
     */
    List<ReceivePaymentEntity> getRefundAmountInfo(@Param("ids") List<String> ids);

    /**
     * 根据结汇单号和外销合同号获取已收款总额
     * @param invoiceNumber 结汇单号
     * @param contractNo 外销合同号
     * @return 已收款总额
     */
    BigDecimal getCollectionAmountSum(String invoiceNumber, String contractNo);

    /**
     * 通過外銷合同號獲取收款信息
     * @param contractNo 外銷合同號
     * @return 收款信息
     */
    List<ReceivePaymentEntity> getCollectionByContractNo(String contractNo);



    //***********************************************导销售合同***********************************************************


    /**
     * 获取销售合同
     * @param req 查询条件
     * @return 销售合同
     */
    List<ImportContractInfRsp> getImportContractInfo(ImportContractInfoReq req);




    //*************************************************导结汇信息*********************************************************
    /**
     * 获取结汇关联合同信息
     * @param req 查询条件
     * @return 结汇关联合同信息
     */
    List<ImportExchangeInfoRsp> getImportExchangeInfo(ImportExchangeInfoReq req);



    /**
     * 通过合同号获取结汇信息
     * @param contractNo 合同号
     * @return 结汇信息
     */
    List<BillExchangeInfoRsp> getBillExchangeInfo(@Param("contractNo") String contractNo);



    /**
     * 通过主键修改结汇明细数据
     * @param req 结汇数据
     * @return 影响行数
     */
    int updateBillExchangeDetail(BillExchangeDetailReq req);



    //************************收款统计*******************************************
    /**
     * 根据用户名称获取用户实体
     * @param userName
     * @return
     */
    List<UserEntity> findUser(String  userCode);
    /**
     * 收款金额明细统计
     * @param req
     * @return
     */
    List<CollectionStatistics1Rsp> collectionStatistics1(CollectionStatistics1Req req);
    /**
     * 按发票应收款统计 或者 按发票应收统计价格术语不同
     * @param req
     * @return
     */
    List<CollectionStatistics2Rsp> collectionStatistics2(CollectionStatistics2Req req);
    /**
     * 业务员年度认领金额统计
     * @param req
     * @return
     */
    List<CollectionStatistics3Rsp> collectionStatistics3(CollectionStatistics3Req req);
    /**
     * 按合同应收款统计
     * @param req
     * @return
     */
    List<CollectionStatistics4Rsp> collectionStatistics4(CollectionStatistics4Req req);

    /**
     * 本月待认领水单
     * @param req 查询条件
     * @return 本月待认领水单
     */
    long getBillNoCount(StatisticsInfoReq req);

    /**
     * FQ利润统计
     * @param req 查询条件
     * @return FQ利润统计
     */
    List<ProfitStatisticsRsp> getProfitStatisticsInfo(ProfitStatisticsReq req);

    /**
     * 根据客户编码获取该客户收汇金额合计
     * @param customerCode 客户编码
     * @return 该客户收汇金额合计
     */
    BigDecimal getSumCollectionAmount(String customerCode);

    /**
     * 根据发票编号获取收款主表id(多个id以英文逗号隔开)
     * @param billNo 发票编号
     * @return 收款主表id(多个id以英文逗号隔开)
     */
    String getReceivePaymentId(String billNo);

    /**
     * 获取收款信息
     * @param req 查询条件
     * @return 收款信息
     */
    List<ReceivePaymentEntity> getReceivePaymentBillNoByQuery(ReceivePaymentListReq req);

    /**
     * 产品统计
     * @param req 查询条件
     * @return 产品统计
     */
    List<ProductStatisticsRsp> getProductStatisticsInfo(ProductStatisticsReq req);

    /**
     * 产品出货详情统计
     * @param req
     * @return
     */
    List<CollectionStatistics6Rsp> getCollectionStatistics6List(CollectionStatistics6Req req);

    /**
     * 订单详情统计
     * @param req 查询条件
     * @return 订单详情
     */
    List<OrderDetailRsp> getOrderDetail(OrderDetailReq req);
}
